﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dominio;

namespace Interfaz
{
    public partial class VentanaMediosDePago : UserControl
    {
        #region atributos

        private static VentanaMediosDePago instance;
        private List<MedioDePago> lMediosDePago;
        private int ultimoIdMedioDePago;
        private bool ingreso;
        private MedioDePago actualMedioDePago;

        #endregion

        #region constructor

        public VentanaMediosDePago()
        {
            InitializeComponent();
            ingreso = true;
            lMediosDePago = Sistema.getMediosDePago();
            ultimoIdMedioDePago = Sistema.getUltimoIdMedioDePago();            
        }

        public static VentanaMediosDePago getInstance()
        {
            if (instance == null)
            {
                instance = new VentanaMediosDePago();
            }
            instance.listaMediosDePago.DataSource = instance.lMediosDePago.ToArray();
            instance.limpiarCampos();
            return instance;
        }

        #endregion

        #region eventos

        private void BotonAceptar_Click(object sender, EventArgs e)
        {
            if (validarDatos())
            {                
                if (ingreso)
                {
                    ultimoIdMedioDePago += 1;
                    actualMedioDePago.OID = ultimoIdMedioDePago;
                    actualMedioDePago.Nombre = TextoNombre.Text;                    
                    Sistema.agregarMedioDePago(TextoNombre.Text);
                    lMediosDePago.Add(actualMedioDePago);
                    listaMediosDePago.DataSource = lMediosDePago.ToArray();
                    limpiarCampos();
                }
                else
                {
                    actualMedioDePago.Nombre = TextoNombre.Text;                    
                    Sistema.modificarMedioDePago(TextoNombre.Text, actualMedioDePago);
                    listaMediosDePago.DataSource = lMediosDePago.ToArray();
                    limpiarCampos();
                }
            }
        }

        private void buttonNuevo_Click(object sender, EventArgs e)
        {
            limpiarCampos();
        }

        private void buttonEliminar_Click(object sender, EventArgs e)
        {
            if (listaMediosDePago.SelectedIndex != -1)
            {
                Sistema.eliminarMedioDePago(actualMedioDePago);
                lMediosDePago.Remove(actualMedioDePago);
                listaMediosDePago.DataSource = lMediosDePago.ToArray();
                limpiarCampos();
            }
        }

        private void listaMediosDePago_Click(object sender, EventArgs e)
        {
            listaMediosDePago_SelectedIndexChanged(sender, e);
        }

        private void listaMediosDePago_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listaMediosDePago.SelectedIndex != -1)
            {
                ingreso = false;
                actualMedioDePago = (MedioDePago)listaMediosDePago.SelectedItem;
                labelId.Text = actualMedioDePago.OID.ToString();
                TextoNombre.Text = actualMedioDePago.Nombre;
            }
        }

        #endregion

        #region metodos

        private bool validarDatos()
        {
            bool ok = true;
            if (TextoNombre.Text.Equals("") && ok)
            {
                MessageBox.Show("Error. Nombre vacío");
                ok = false;
            }            
            return ok;
        }

        private void limpiarCampos()
        {
            ingreso = true;
            labelId.Text = "";
            TextoNombre.Text = "";            
            actualMedioDePago = new MedioDePago();
        }

        #endregion
                
    }
}
